package pe.com.upc.edu.rtt.service.impl;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import pe.com.upc.edu.rtt.EventoDeportivo;
import pe.com.upc.edu.rtt.EventoServicesSoapProxy;
import pe.com.upc.edu.rtt.bean.PartidoBean;
import pe.com.upc.edu.rtt.service.ConsultarPartidosService;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;

@Service("ConsultarPartidosService")
public class ConsultarPartidosServiceImpl implements ConsultarPartidosService {

	private static final Log _log = LogFactoryUtil.getLog(ConsultarPartidosServiceImpl.class);
	private static EventoServicesSoapProxy eventoServicesSoapProxy = new EventoServicesSoapProxy();
	
	@Override
	public Map<String, Object> buscarPartidos(int pagina, int filas, String fechaInicio, String fechaFin, String ubicacion, String estadio, String descripcionEvento ) throws NumberFormatException, RemoteException {		
		Map<String, Object> result = new HashMap<String, Object>();
		List<PartidoBean> listaPartidos = null;
		Integer count = 0;
		int total = 0;
		int records = 0;
		int init = 0;
		int fin = 0;
		_log.info("buscarPartidos pagina:"+pagina+" filas:"+filas+" fechaInicio:"+fechaInicio+" fechaFin:"+fechaFin+" ubicacion:"+ubicacion+" estadio:"+estadio+" descripcionEvento:"+descripcionEvento);
		//invocacion para obtener las cantidades
		count = eventoServicesSoapProxy.countEventosFiltrado(ubicacion, estadio, fechaInicio, fechaFin, descripcionEvento);
		//
		_log.info("buscarPartidos count:"+count);
		if (count != null && count > 0) {
			if (count > 0) {				
				total = (count / filas) + 1;
			}
			init = (filas * pagina - filas);
			fin = init + filas;
			if (init > 0) {
				init += 1;
			}			
			_log.info("buscarPartidos init:"+init + " fin:"+fin);
			EventoDeportivo[] lsitaEvnetos = eventoServicesSoapProxy.listarEventosFiltrado(init,fin,ubicacion, estadio, fechaInicio, fechaFin, descripcionEvento);
			/// obtener datos del servicio web			
		    listaPartidos = new ArrayList<PartidoBean>();
			if ((lsitaEvnetos != null) && (lsitaEvnetos.length > 0)) {
				EventoDeportivo eventoDeportivo = null;
				PartidoBean partidoBean = null;
				for (int i = 0; i < lsitaEvnetos.length; i++) {
					eventoDeportivo = lsitaEvnetos[i];
					partidoBean = new PartidoBean();
					partidoBean.setIdPartido(eventoDeportivo.getIdEvento());
					partidoBean.setTitulo(eventoDeportivo.getDescripcion());
					partidoBean.setFechapartido(eventoDeportivo.getFechaInicio());
					partidoBean.setFechapartidofin(eventoDeportivo.getFechaFinEvent());
					partidoBean.setCantidadEntradas(eventoDeportivo.getLimiteEntradas());
					partidoBean.setPrecio(eventoDeportivo.getPrecioEntrada());
					listaPartidos.add(partidoBean);
				}	
				_log.info("buscarPartidos listaPartidos:");	
				_log.info(listaPartidos);	
			}	
		}		
		result.put("pagina", pagina);
		result.put("total", total);
		if(listaPartidos!=null){
			records = listaPartidos.size();
			result.put("lst", listaPartidos);	
		}
		result.put("count", count);
		result.put("records", records);	
		return result;
	}


}
